package com.lixinlei.security.order.oauth2.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;

@Configuration
/**
 * 开启 @EnableResourceServer 之后，就是告诉 order 这个服务，它本身是作为 OAuth2 中的资源服务器；
 * 开启 @EnableResourceServer 之后，默认所有发往 order 这个服务的 HTTP 请求，
 * order 服务都会在请求的 HTTP Header 中找 Token，如果找不到 Token，就不让过，当需要设置哪些请求要 Token，哪些不要的时候，就可以覆盖方法：
 * configure(HttpSecurity http)
 */
@EnableResourceServer
public class OAuth2ResourceServerConfig extends ResourceServerConfigurerAdapter {

    /**
     * 申明我这个 order 服务就是在认证服务器中配置的 order-server，给 orderApp 客户端应用发的 Token 只能访问我；
     */
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("order-server");
    }

    /**
     * 除了 /haha 这个请求不需要 Token，其他的请求都需要 Token
     */
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/haha").permitAll()
                .anyRequest().authenticated();
    }

}
